第5章 排序检索数据

    排序数据
    按多个列排序
    指定排序方向

  

一、排序数据

  检索出的数据并不是以纯粹的随机顺序显示的。如果不排序,数据一般将以它在底层表中出现的顺序显示。这可以是数据最初添加到表中的顺序。但是,如果数据后来进行过更新或删除,则此顺序将会受到MySQL重用回收存储空间的影响。因此,如果不明确控制的话,不能(也不应该)依赖该排序顺序。关系数据库设计理论认为,如果不明确规定排序顺序,则不应该假定检索出的数据的顺序有意义。

子句: SQL语句由子句构成,有些子句是必需的,而有的是可选的。一个子句通常由一个关键字和所提供的数据组成。子句的例子有select语句的from子句。

  为了明确地排序用select语句检索出数据,可使用order by子句。order by子句取一个或多个列的名字,据此对输出进行排序。

    select prod_name form products order by prod_name;

  通常,order by子句中使用的列将是为显示所选择的列。但是,实际上并不一定要这样,用非检索的列排序数据是完全合法的。

  

二、按多个列排序

  首先按价格,然后再按名称排序:

    select prod_id, prod_price, prod_name 
    from products 
    order by prod_price, prod_name;

  仅在多个行具有prod_price值时才对产品按prod_name进行排序。如果prod_price列中所有的值都是唯一的,则不会按prod_name排序。

  

三、指定排序方向

  数据排序不限于升序排序(从A到Z)。这只是默认的排序顺序,还可以使用order by子句以降序(从Z到A)顺序排序。为了进行降序排序,必须指定desc关键字。

    select prod_id, prod_price, prod_name
    from products
    order by prod_price desc;

  但是,如果打算用多个列排序怎么办?以降序排序产品(最贵的在最前面),然后再对产品名排序:

    select prod_id, prod_price, prod_name
    from products
    order by prod_price desc, prod_name;

  desc关键字只应用到直接位于其前面的列名。

注意:在字典排序顺序中,A被视为与a相同,这是MySQL的默认行为。用order by子句做不到。许多数据库管理员可以改变这种规则。

  使用order by和limit组合,找出列中最高或最低的值。

    select prod_price
    from products
    order by prod_price desc
    limit 1;

注意:子句的顺序。

  

🔚